/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.common.service;

import java.util.Date;
import java.util.List;

import co.gov.medellin.sdep.sisdep.common.exception.ArchivoAnexoException;
import co.gov.medellin.sdep.sisdep.common.exception.ArchivoAnexoRuntimeException;
import co.gov.medellin.sdep.sisdep.common.exception.descriptor.ArchivoAnexoMessageDescriptor;
import co.gov.medellin.sdep.sisdep.common.message.MessageDescriptorConstant;
import co.gov.medellin.sdep.sisdep.model.ArchivoAnexo;
import co.gov.medellin.sdep.sisdep.model.dao.impl.IArchivoAnexoDAOT;


/**
 * <p>
 * Implementacion de todos los servicios servicios necesarios para la gestion de carga de archivos en servidor SISDEP.
 * </p>
 * <p>
 * Copyright (c) 2012<BR>
 * Consult-Soft S.A.<BR>
 * Created on: May 28, 2012<BR>
 * 
 * @author atabares
 * </p>
 */
public class ArchivoAnexoServiceImpl extends BaseService implements IArchivoAnexoService {

	/** Default serial version. */
	private static final long serialVersionUID = -8205304701781948966L;
	
	/** Interface de acceso a los DAOs de Modulo. */
	private IArchivoAnexoDAOT archivoAnexoDAO;

	/**
	 * Default Constructor.
	 */
	public ArchivoAnexoServiceImpl() {
	}
	
	/**
	* Obtiene el parametro archivoAnexoDAO.
	* @see ArchivoAnexoServiceImpl#archivoAnexoDAO
	*
	* @return El parametro archivoAnexoDAO.
	*/
	public IArchivoAnexoDAOT getArchivoAnexoDAO() {
		return archivoAnexoDAO;
	}

	/**
	* Asigna el parametro archivoAnexoDAO.
	* @see ArchivoAnexoServiceImpl#archivoAnexoDAO
	*
	* @param archivoAnexoDAO valor a asignar al parametro archivoAnexoDAO.
	*/
	public void setArchivoAnexoDAO(IArchivoAnexoDAOT archivoAnexoDAO) {
		this.archivoAnexoDAO = archivoAnexoDAO;
	}

	
	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.common.service.IArchivoAnexoService#insert(co.gov.medellin.sdep.sisdep.model.ArchivoAnexo)
	 */
	public void insert(ArchivoAnexo archivoanexo) throws ArchivoAnexoException {
		try{
			archivoanexo.setUsuarioCrea(getPrincipalUser());
			getArchivoAnexoDAO().insert(archivoanexo);
		}catch (Exception e) {
			Object [] infoError = {};
			throw new ArchivoAnexoException(new ArchivoAnexoMessageDescriptor(MessageDescriptorConstant.SAVE), infoError, e);
		}
	}
	
	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.common.service.IArchivoAnexoService#getCurrentInsert()
	 */
	public Long getCurrentInsert() throws ArchivoAnexoException {
		try{
			return getArchivoAnexoDAO().getCurrentInsert();
		} catch (Exception e) {
			throw new ArchivoAnexoRuntimeException(new ArchivoAnexoMessageDescriptor(MessageDescriptorConstant.UPDATE), null, e);
		}
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.common.service.IArchivoAnexoService#update(co.gov.medellin.sdep.sisdep.model.ArchivoAnexo)
	 */
	public final void update(ArchivoAnexo archivoanexo) throws ArchivoAnexoException {
		try{
			getArchivoAnexoDAO().update(archivoanexo);
		}catch (Exception e) {
			Object [] infoError = {
			};
			if(e.getCause().toString().indexOf("UNIQUE KEY") >= 0){
				throw new ArchivoAnexoRuntimeException(new ArchivoAnexoMessageDescriptor(MessageDescriptorConstant.UK_VIOLATION), infoError, e);
			}else{
				throw new ArchivoAnexoRuntimeException(new ArchivoAnexoMessageDescriptor(MessageDescriptorConstant.UPDATE), infoError, e);
			}
		}
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.common.service.IArchivoAnexoService#delete(co.gov.medellin.sdep.sisdep.model.ArchivoAnexo)
	 */
	public final void delete(ArchivoAnexo archivoanexo) throws ArchivoAnexoException {
		try {
			getArchivoAnexoDAO().deleteByPrimaryKey(archivoanexo.getId().longValue());
		}catch (Exception e) {
			Object [] infoError = {
			};
			throw new ArchivoAnexoRuntimeException(new ArchivoAnexoMessageDescriptor(MessageDescriptorConstant.DELETE), infoError, e);
		}
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.common.service.IArchivoAnexoService#loadByCriteria(co.gov.medellin.sdep.sisdep.model.ArchivoAnexo)
	 */
	public final List loadByCriteria(ArchivoAnexo archivoanexo) throws ArchivoAnexoException {
		try{
			return getArchivoAnexoDAO().findByCriteria(archivoanexo);
		}catch (Exception e) {
			Object [] infoError = null;
			throw new ArchivoAnexoRuntimeException(new ArchivoAnexoMessageDescriptor(MessageDescriptorConstant.RETRIEVE), infoError, e);
		}
	}

	/* (non-Javadoc)
	 * @see co.gov.medellin.sdep.sisdep.common.service.IArchivoAnexoService#get(long)
	 */
	public final ArchivoAnexo get(long id) throws ArchivoAnexoException {
		try{
			return getArchivoAnexoDAO().findByPrimaryKey(id);
		}catch (Exception e) {
			Object [] infoError = {new Long(id)};
			throw new ArchivoAnexoRuntimeException(new ArchivoAnexoMessageDescriptor(MessageDescriptorConstant.GET), infoError, e);
		}
	}

}
